[t:/]$ 지식_

TF-IDF 이해하기

2017/09/07

잘 된 문서들이 많으나 성격이 급하므로 요약을 보고 싶다. 학습노트를 적어두는데, 틀릴 수도 있다. -_-; 방문객이 거의 없는 블로그지만 참고하세요.

1. TF

문서 1: 나는 너를 정말 정말 사랑해. 

한 줄을 문서 1개로 본 것이며 이 문서에서 "정말"의 TF는 그냥 2다. 기타 다른 트릭들은 그저 스케일이나 정규화 처리에 관한 것들이므로 이렇게 이해하면 쉽다.

2. IDF

문서 1: 나는 너를 정말 많이 사랑해
문서 2: 나는 너를 정말 너무 사랑해
문서 3: ...

이런 일련의 문서셋이 있을 때 "많이", "너무" 가 문서를 특징하는 지표가 되고 나머지 토큰들은 별 쓸모가 없다. 이때 "많이", "너무"의 IDF가 크다.

3. TF-IDF

두 값을 곱하면 된다. 특정 문서에 자주 출현하면서 그 문서를 특징하는 토큰이 더 높은 값을 갖는다. 즉, TF-IDF가 높은 순서로 단어 5개를 뽑는다면, 그 단어 5개가 그 문서를 대표하는 키워드라고 볼 수 있다.

4. 스파크 spark의 TF와 IDF

예제에 나온 코드를 보면 해싱트릭을 사용하고 있다. 자동으로 토큰의 인덱스와 TF를 구해준다. 왐마 편해부러. 아마도 민해시 minhash의 원리에 의해서 데이터가 많고 벡터의 길이가 충분하면 해시가 쫑나도 별 문제 없이 쓸 수 있는 데이터가 될 것으로 추정된다. IDF도 잘 구해준다. 다만 토크나이저는 특수문자 처리를 못하고 있고, 정규표현식이 가능한 토크나이저는 정규표현식이 다른 언어의 정규표현식과 좀 다른 것 같다. 개인이 맵퍼를 만들어 토크나이징하면 된다.

https://github.com/apache/spark/blob/master/examples/src/main/python/mllib/tf_idf_example.py

예제에서 마지막 트랜스 폼에서 tf-idf를 구한다.





공유하기













[t:/] is not "technology - root". dawnsea, rss